import Vue from "vue"
import axios from 'axios'
import VueAxios from 'vue-axios'

import { getToken, saveToken } from "./token.js"

import { Toast } from 'vant'
import router from "@/router/index.js"
Vue.use(VueAxios, axios)

// 创建instance
const instance = axios.create({
    baseURL: 'http://toutiao.itheima.net',
    timeout: 10000,
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    if (getToken()) {
        config.headers.Authorization = 'Bearer ' + getToken().token
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});


// 添加响应拦截器:处理 401 token 刷新问题
instance.interceptors.response.use(
    function (response) {
        // 对响应数据做点什么
        // console.log(response)
        return response;
    },
    async function (error) {
        // 对响应错误做点什么
        if (error.response && error.response.status == 401) {
            // console.log(getToken);
            if (getToken()) {
                try {
                    let ret = await axios({
                        url: 'http://toutiao.itheima.net/v1_0/authorizations',
                        method: "put",
                        headers: {
                            Authorization: `Bearer ${getToken().refresh_token}`
                        },
                    })

                    saveToken({
                        token: ret.data.data.token,
                        refresh_token: getToken().refresh_token
                    })
                    //重新发送用户之前的请求
                    return instance(error.config)
                } catch (err) {
                    Toast("请先登入")
                    router.push("/login")
                }
            } else {
                // 如果没有token，说明还没有登入，跳转回登入页面
                Toast.success("请先登入")
                router.push("/login")
            }
        } else {
            // 不是401 错误与token无关
        }
        return Promise.reject(error);
    });

export default instance

